package vista;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.WindowConstants;

import modelo.Tablero;
import controlador.Controlador;
import fiuba.algo3.titiritero.dibujables.SuperficiePanel;
import fiuba.algo3.titiritero.modelo.GameLoop;
import fiuba.algo3.titiritero.modelo.SuperficieDeDibujo;

public class VentanaPrincipal {
	
	public final static int LADO = 30;
	final static int RETARDO = 500;
	
	private GameLoop gameLoop;
	private JFrame ventana;
	private SuperficiePanel superficieJuego;	
	private JLabel indicadorPosicion;
	private JLabel puntaje;
	private ButtonGroup grupoOpciones;
	private JRadioButton disparo;
	private JRadioButton minaDeContacto;
	private JRadioButton minaPuntual;
	private JRadioButton minaDoble;
	private JRadioButton minaTriple;
	private Controlador controlador;
	//Cambiar este boton con otra cosa
	private JButton inicio = new JButton("Iniciar");
	
	public VentanaPrincipal() {
		inicializarVentana();
		inicializarSuperficieJuego();
		gameLoop = new GameLoop(RETARDO,(SuperficieDeDibujo) superficieJuego);
		indicadorPosicion = new JLabel();
		puntaje = new JLabel();
		inicializarRadioButtons();
		agregarComponentes();
		registrarControlador();
	}
	
	private void registrarControlador() {
		controlador = new Controlador(this);
		superficieJuego.addMouseMotionListener(controlador);
		superficieJuego.addMouseListener(controlador);
		disparo.addItemListener(controlador);
		minaDeContacto.addItemListener(controlador);
		minaPuntual.addItemListener(controlador);
		minaDoble.addItemListener(controlador);
		minaTriple.addItemListener(controlador);
		inicio.addActionListener(controlador);
	}

	private void inicializarSuperficieJuego() {
		Dimension dimension = new Dimension(LADO*Tablero.COLUMNAS,LADO*Tablero.FILAS);
		superficieJuego = new SuperficiePanel();
		superficieJuego.setPreferredSize(dimension);
		superficieJuego.setBackground(new Color(30,144,255));
	}
	
	private void inicializarVentana() {
		ventana = new JFrame("Batalla Navalgo");
		ventana.setLayout(new FlowLayout());
		ventana.setResizable(false);
		ventana.setLocationRelativeTo(null);
		ventana.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

	private void inicializarRadioButtons() {
		grupoOpciones = new ButtonGroup();
		disparo = new JRadioButton("Disparo");
		minaDeContacto = new JRadioButton("Contacto");
		minaPuntual = new JRadioButton("Puntual");
		minaDoble = new JRadioButton("Doble");
		minaTriple = new JRadioButton("Triple");
		grupoOpciones.add(disparo);
		grupoOpciones.add(minaDeContacto);
		grupoOpciones.add(minaPuntual);
		grupoOpciones.add(minaDoble);
		grupoOpciones.add(minaTriple);
	}
	
	private void agregarComponentes() {
		Box box = new Box(BoxLayout.Y_AXIS);
		box.add(new JLabel("Posicion Actual:"));
		box.add(indicadorPosicion);
		box.add(new JLabel("Puntaje:"));
		box.add(puntaje);
		box.add(new JLabel("Disparo:"));
		box.add(disparo);
		box.add(new JLabel("Mina:"));
		box.add(minaDeContacto);
		box.add(minaPuntual);
		box.add(minaDoble);
		box.add(minaTriple);		
		
		//
		box.add(inicio);
		
		ventana.add(superficieJuego);
		ventana.add(box);
	}
	
	public void mostrarVentana() {
		ventana.pack();
		ventana.setVisible(true);
	}

	public JLabel getIndicadorPosicion() {
		return indicadorPosicion;
	}
	
	public JLabel getPuntaje() {
		return puntaje;
	}
	
	public ButtonGroup getGrupoOpciones() {
		return grupoOpciones;
	}
	
	public GameLoop getGameLoop() {
		return gameLoop;
	}
}
